#pragma once


//template<class K>
//class Myset
//{
//	struct setKofT
//	{
//		const K& operator()(const K& key)
//		{
//			return key;
//		}
//	};
//public:	
//	
//	typedef typename RBTree<K, const K, setKofT>::Iterator iterator;
//	
//	iterator begin()
//	{
//		return _t.Begin();
//	}
//	iterator end()
//	{
//		return _t.End();
//	}
//
//
//	bool Insert(const K& k)
//	{
//		return _t.Insert(k);
//	}
//
//	
//private:
//	RBTree<K,const K, setKofT> _t;
//};

template<class K>
class Myset
{
    struct setKofT
    {
        const K& operator()(const K& key)
        {
            return key;
        }
    };
public:
    typedef typename RBTree<K, const K, setKofT>::Iterator iterator;
    typedef typename RBTree<K, const K, setKofT>::ConstIterator const_iterator;

    iterator begin()
    {
        return _t.Begin();
    }
    iterator end()
    {
        return _t.End();
    }

    const_iterator begin() const
    {
        return _t.Begin();
    }
    const_iterator end() const
    {
        return _t.End();
    }

    pair<iterator,bool> Insert(const K& k)
    {
        return _t.Insert(k);
    }

private:
    RBTree<K, const K, setKofT> _t;
};